#ifndef PDFCONVERTER_H_
#define PDFCONVERTER_H_

#include <PFileInfo.h>
#include <PDFDoc.h>
#include <Page.h>
#include <Object.h>
#include <Stream.h>
#include <TextOutputDev.h>
#include <Dict.h>
#include <GString.h>
#include <string>
#include <cctype>
#include <sstream>
#include "IConverter.h"


namespace Pdfcon
{

	//void reader(void *stream,char *text,int len);

	//! Converter
	/*!
		Trieda na konvertovanie dokumentov pdf na cisty text.
		Pozn.: Dodatocna implementacia triedy o moznost editovania
		pdf suboru na vyznacenie slov.
	*/
	class Converter : public PluginSystem::IConverter
	{
		public:

				//! Converter (public )
				/*!
					Konstruktor triedy
					\param void
					\return
				*/
				Converter(void);


				//! Converter (public )
				/*!
					Pretazeny konstruktor ktory umoznuje urcit
					tmp adresar
					\param std::string theTmpDir
					\return
				*/
				Converter(std::string theTmpDir);

				//! ~Converter (public )
				/*!
					Destruktor triedy
					\param void
					\return
				*/
				  ~Converter(void);

				  //! Open
				  /*!
				  Sluzi na otvorenie dokumentu na konvertovanie.
				  Samotny dokument je ulozeny v forme objektu PFileInfo v pameti aplikacie.
				  \param theFile objekt obsahujuci dokument na konverziu
				  \return true ak sa dokument uspesne otvoril, false inak
				  */
				  virtual bool Open(PComunicator::PFileInfo &theFile);

				  //! Read
				  /*!
				  Sluzi na precitanie dokumentu a jeho konverziu na cisty text
				  \return std::wstring obsahujuci text dokumentu
				  */
				  virtual std::wstring Read();

				  virtual std::string Format();

				  //! CreateHtml
				  /*!
				  Funkcia sluzi na prekonvertovanie povodneho dokumentu na html stranku
				  \param string predstavuje cestu kam sa ma ulozit html stranka
				  \return string predstavuje plnu cestu k html stranke
				  */
				  virtual std::string CreateHtml(std::string thePath);

				  virtual char* Version();

				  virtual char* Autor();

		private:
				//data
				PDFDoc *myPdf;
				std::string mypdfname;
				std::wstring myOutput;
				std::string myTmpDir;

				//functions
				void reader(char *text,int len);
				static void wrapper_reader(void *stream,char *text,int len);
				std::string get_info(Dict *infoDict, char *key);

	};

} //end of namespace Pdfcon

#endif
